package src.src;

/**
 * Clase de implementación de InsertionSort
 * Adaptada del libro "Data Structures in Java for the Principled Programmer"
 * @author Duane A. Bailey - Grupo 5
 */
public class insertionSort {

    /**
     * Retiene temporalmente los datos
     */
    protected static Comparable[] data;
    
    /**
     * Realiza un ordenamiento con el algoritmo de inserción
     * pre: 0 <= n <= data.length
     * post: valores en data[0..n-1] en orden ascendente
     * @param list Datos a ordenar
     */
    public static void insertionSort_srt(Comparable[] list) {
        for (int index = 1; index < list.length; index++) {
            Comparable key = list[index];
            int position = index;

            //  Shift larger values to the right
            while (position > 0 && key.compareTo(list[position - 1]) < 0) {
                list[position] = list[position - 1];
                position--;
            }

            list[position] = key;
        }

        setData(list);
    }

    /**
     * Define la forma de obtener los datos
     * @return arreglo de datos
     */
    public static Comparable[] getData() {
        return data;
    }

    /**
     * Define la forma de interactuar con los datos
     * @param data1 el nuevo arreglo de datos
     */
    public static void setData(Comparable[] data1) {
        data = data1;
    }

    @Override
    public String toString() {
        String resultado = "";

        for (int i = 0; i < data.length; i++) {
            resultado = data[i] + "  ";
        }

        return resultado;
    }
}